package br.com.ava.view.entrada;

import java.io.IOException;
import java.util.Arrays;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;

import br.com.ava.core.entrada.EntradaProduto;
import br.com.ava.core.entrada.EntradaProdutoMediator;
import br.com.ava.core.entrada.ItemEntrada;
import br.com.ava.core.fornecedor.Fornecedor;
import br.com.ava.core.fornecedor.FornecedorMediator;
import br.com.ava.core.infra.excecao.NegocioException;
import br.com.ava.core.produto.Produto;
import br.com.ava.core.produto.ProdutoMediator;
import br.com.ava.view.AplicacaoMB;

@ManagedBean
@ViewScoped
public class EntradaMB extends AplicacaoMB {

	private EntradaProduto entradaProduto;
	private ItemEntrada itemEntrada;
	private Integer idFornecedor;
	private Integer idFuncionario;
	private Integer idProduto;

	@ManagedProperty(value = "#{entradaProdutoMediator}")
	private EntradaProdutoMediator entradaProdutoMediator;
	@ManagedProperty(value = "#{fornecedorMediator}")
	private FornecedorMediator fornecedorMediator;
	@ManagedProperty(value = "#{produtoMediator}")
	private ProdutoMediator produtoMediator;

	public EntradaMB() {
		this.entradaProduto = new EntradaProduto();
		this.itemEntrada = new ItemEntrada();
	}

	@PostConstruct
	public void init() {
		validarPermissao();
	}

	public void confirmar() throws IOException {

		try {
			if (idFornecedor != null) {
				entradaProduto.setFornecedor(fornecedorMediator
						.buscar(idFornecedor));
			}

			entradaProdutoMediator.entrada(entradaProduto,
					obterIdFuncionarioLogado());
			adicionarMensagemCadastroSucesso();
			entradaProduto = new EntradaProduto();
			idFornecedor = null;
			idFuncionario = null;
			idProduto = null;
		} catch (NegocioException erro) {
			adicionarMensagemErro(erro.getMensagens());
		}
	}

	public void adicionar() {

		try {

			if (idProduto != null) {
				itemEntrada.setProduto(produtoMediator.buscar(idProduto));
			}
			itemEntrada.setEntradaProduto(entradaProduto);
			entradaProdutoMediator.validarItensEntrada(Arrays
					.asList(itemEntrada));
			entradaProduto.addItem(itemEntrada);

			itemEntrada = new ItemEntrada();
			idProduto = null;
		} catch (NegocioException erro) {
			adicionarMensagemErro(erro.getMensagens());
		}
	}

	public List<Fornecedor> getFornecedores() {
		return fornecedorMediator.consultarTodas();
	}

	public List<Produto> getProdutos() {
		return produtoMediator.consultarTodos();
	}

	public EntradaProduto getEntradaProduto() {
		return entradaProduto;
	}

	public void setEntradaProduto(EntradaProduto entradaProduto) {
		this.entradaProduto = entradaProduto;
	}

	public Integer getIdFornecedor() {
		return idFornecedor;
	}

	public void setIdFornecedor(Integer idFornecedor) {
		this.idFornecedor = idFornecedor;
	}

	public Integer getIdFuncionario() {
		return idFuncionario;
	}

	public void setIdFuncionario(Integer idFuncionario) {
		this.idFuncionario = idFuncionario;
	}

	public EntradaProdutoMediator getEntradaProdutoMediator() {
		return entradaProdutoMediator;
	}

	public void setEntradaProdutoMediator(
			EntradaProdutoMediator entradaProdutoMediator) {
		this.entradaProdutoMediator = entradaProdutoMediator;
	}

	public FornecedorMediator getFornecedorMediator() {
		return fornecedorMediator;
	}

	public void setFornecedorMediator(FornecedorMediator fornecedorMediator) {
		this.fornecedorMediator = fornecedorMediator;
	}

	public ItemEntrada getItemEntrada() {
		return itemEntrada;
	}

	public void setItemEntrada(ItemEntrada itemEntrada) {
		this.itemEntrada = itemEntrada;
	}

	public Integer getIdProduto() {
		return idProduto;
	}

	public void setIdProduto(Integer idProduto) {
		this.idProduto = idProduto;
	}

	public ProdutoMediator getProdutoMediator() {
		return produtoMediator;
	}

	public void setProdutoMediator(ProdutoMediator produtoMediator) {
		this.produtoMediator = produtoMediator;
	}

	@Override
	public String perfilPagina() {
		return "funcionario";
	}

}
